
////--- #include "time_taskv30.h"




#ifndef __TIME_TASK_V30_H__
#define __TIME_TASK_V30_H__

#include <stdbool.h>
#include <stdint.h>


  
#define   TIME_TASK_FILE_NAME        "time_task.bin"


#define   FLASH_TIME_TASK_FIRST_WR        (0xA1U)    //首次写标志
#define   FLASH_TIME_TASK_MANAGER_ADDR   ( 0U )      //定时任务管理数据射空间首地址--
#define   FLASH_TIME_TASK_PAGE           ( 32U )     //定时任务数据映射空间首地址--


//#define   TIME_TASK_PARA_BUF_MAX        (256u)    //flash的长度要是偶数




/********************************定时任务*********************************/

#define TIME_TASK_MAX              (255U)     ///定时任务的总数
#define TIME_TASK_PARAM_MAX        (32U)

typedef enum{
    schedule_single = 1,
    schedule_daily = 2,
    schedule_weekly = 3,
} schedule_mode_e;

typedef enum{
    time_mode_fixtime = 1,
    time_mode_sunrise = 2,
    time_mode_sunset = 3,
} time_mode_e;




#pragma pack(1)

    //定时任务管理结构-----该数据结构大小不能超过 FLASH_TIME_TASK_PAGE,否则数据覆盖到了定时任务数据
typedef struct{

    uint8_t  First;              //首次上电  	
    uint8_t  total;              //定时任务的总数

}  time_task_manager_t;  //这个



typedef struct{

    //定时结构
    uint8_t task_id;
    uint64_t begin_time;
    uint64_t end_time;
    schedule_mode_e schedule_mode;
    uint8_t schedule_weekday;//schedule为weekly时有效，bit0-6对应周日到周六，可多选
    time_mode_e time_mode;
    int8_t offset;
    uint8_t hour;
    uint8_t minute;

    //任务参数（以pb压缩方式存储）
    uint8_t param_len;
    uint8_t param[TIME_TASK_PARAM_MAX];
}  time_task_t;


#pragma pack()



/**
 * @brief time_task_init
 * 
 */
  void time_task_init(void);

void time_task_save_enable(void);


/**
 * @brief 保存定时任务,添加/删除等操作后
 */
void Time_Taskv30_Save_Process(void);


/**
 * @brief 添加一个定时任务
 * 
 * @param task 
 * @return uint8_t 
 */
uint8_t time_task_add(time_task_t* task);


/**
 * @brief 删除一个定时任务
 * 
 * @param task_id 
 * @return uint8_t 
 */
uint8_t time_task_del(uint8_t task_id);


/**
 * @brief 删除所有定时任务
 * 
 */
void time_task_del_all(void);



/**
 * @brief 
 * 
 * @return uint8_t 
 */
uint8_t time_task_get_num(void);


/**
 * @brief 
 * 
 * @return uint8_t 
 */
bool time_task_set_num(uint8_t num);



/**
 * @brief 
 * 
 * @param index 
 * @return time_task_t* 
 */
time_task_t* time_task_get_task(uint8_t index);




#endif     ///----__TIME_TASK_V30_H__--




